/*
? 最大公因数（Greatest Common Divisor，简称GCD）是指两个或多个整数共有的最大的因数。
? 换句话说，最大公因数是能够同时整除给定整数的最大正整数。

? 最小公倍数（Least Common Multiple，简称LCM）是指两个或多个整数的公共倍数中最小的一个。
? 换句话说，最小公倍数是能够同时被给定整数整除的最小正整数。
 */

function GCD(...args) {
    //? 求两个数的最大公因数
    function calculateGCD(a, b) {
        if (b === 0) {
            return a;
        }
        return calculateGCD(b, a % b);
    }
    let gcd = args[0];
    for (let i = 1; i < args.length; i++) {
        gcd = calculateGCD(gcd, args[i]);
    }
    return gcd;
}

function LCM(...args) {
    //? 求两个数的最大公因数
    function calculateGCD(a, b) {
        if (b === 0) {
            return a;
        }
        return calculateGCD(b, a % b);
    }
    //? 求两个数的最小公倍数 需要用到最大公因数
    function calculateLCM(a, b) {
        return (a * b) / calculateGCD(a, b);
    }
    let lcm = args[0];
    for (let i = 1; i < args.length; i++) {
        lcm = calculateLCM(lcm, args[i]);
    }
    return lcm;
}

console.log(GCD(12, 18));
console.log(LCM(18, 12));
